package com.cskaoyan.javase.overload._0introduction;

/**
 * 引例，现在有三个需求，需要写三个方法完成：
 *
 * 编写程序，计算两个int类型数据之和，并输出结果
 * 编写程序，计算两个double类型数据之和，并输出结果
 * 编写程序，计算两个long类型数据之和，并输出结果
 * 写完方法后，请问这个程序有哪些缺点呢？
 *
 * 很明显：
 *
 * 这三个方法实现的都是相似的功能，都是求和，只不过是针对的数据类型不同罢了。
 * 在正常情况下，我们认为方法的名字可以用来区分方法，但像引例中功能几乎一样的多个方法，能不能让它们拥有相同的方法名呢？这样既方便记忆，也方便调用。
 *
 * Java是存在这种机制的，那就是Java的方法重载（overload）机制。
 * 方法重载允许一个类中，多个方法拥有相同的名字。但名字一旦相同后，多个方法之间又如何区分呢？
 *
 * 所以方法的重载是有条件的。
 *
 * 方法的重载:
 *      指的是一个类中,多个相似功能的方法,具有相同的名字
 *      但是方法名是用来区分方法的,一旦名字相同,那又怎么区分呢?
 *
 *      方法的签名: 用来唯一区分一个方法,指的是"方法名 (形参列表)"
 *      现在多个方法的方法名已经相同了,那么要想方法有区别,那么它们的形参列表必须不同,这就是方法重载的条件.
 *
 *      何为形参列表不同?
 *          1.形参的个数不同
 *          2.形参的个数是相同的,那么可以数据类型不同
 *          3.个数相同,数据类型也相同时,考虑位置不同,顺序不同
 *
 *          以上三点就是构成方法重载的唯三条件,除此之外,没有其他条件构成方法重载了
 *
 *          比较经典的错误:
 *              1.方法的形参名不同,算不算方法重载?
 *              不构成
 *              2.方法的修饰符列表,返回值类型不同,构不构成方法重载?
 *              不构成
 *
 * 总之,方法的重载要想成功,必须让这个方法在调用时,能够被唯一的确定,否者肯定是不行的
 *
 * @since 14:44
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class NewDemo {
    public static void main(String[] args) {
    }

    public static void test(){}
    // public static int test(){
    //     return 1;
    // }
    // void test(){}
    public static void test(int a){}
    // 这是方法的重复,形参名不同,不构成重载
    // public static void test(int num){}
    public static void test(double a){}
    public static void test(double a,int b){}
    public static void test(int a,double b){}

   /* // 编写程序，计算两个int类型数据之和，并输出结果
    public static int sumInt(int num1, int num2) {
        return num1 + num2;
    }
    // 编写程序，计算两个double类型数据之和，并输出结果
    public static double sumDouble(double num1, double num2) {
        return num1 + num2;
    }
    // 编写程序，计算两个long类型数据之和，并输出结果
    public static long sumLong(long num1, long num2) {
        return num1 + num2;
    }*/
}
